#ifndef B2D_INDEXBUFFER_H
#define B2D_INDEXBUFFER_H

#include "GPUBuffer.h"

NS_B2D_BEGIN



////////////////////////////////////////////////////////////////////////////////////////////////////
/// \brief	Index size.
////////////////////////////////////////////////////////////////////////////////////////////////////
enum class B2D_API IndexSize
{
	INT32_INDEX = 4/*bytes*/,
	INT16_INDEX = 2/*bytes*/,
	//INT8_INDEX = 1/*byte*/ //maybe at some point?
};


////////////////////////////////////////////////////////////////////////////////////////////////////
/// \brief	Index Buffer.
/// 		This hardware buffer stores indices to use with a set of vertex buffers to
/// 		avoid vertex duplication.
////////////////////////////////////////////////////////////////////////////////////////////////////
class B2D_API IndexBuffer
	: public GPUBuffer
{
protected:
	IndexSize mIndexSize;
	size_t mIndexCount;

public:
	IndexBuffer(void);
	virtual ~IndexBuffer(void);

	////////////////////////////////////////////////////////////////////////////////////////////////////
	/// \brief	Gets index size.
	///
	/// \return	The index size.
	////////////////////////////////////////////////////////////////////////////////////////////////////
	IndexSize getIndexSize(void) const { return mIndexSize; }
	////////////////////////////////////////////////////////////////////////////////////////////////////
	/// \brief	Gets index count.
	///
	/// \return	The index count.
	////////////////////////////////////////////////////////////////////////////////////////////////////
	size_t getIndexCount(void) const { return mIndexCount; }

	////////////////////////////////////////////////////////////////////////////////////////////////////
	/// \brief	Resizes the buffer.
	///
	/// \param	indexCount	Number of indeces.
	/// \param	indexSize 	Size of an index.
	/// \param	usage	  	The usage.
	////////////////////////////////////////////////////////////////////////////////////////////////////
	void resize(size_t indexCount, IndexSize indexSize, BufferUsage usage);

private:
	////////////////////////////////////////////////////////////////////////////////////////////////////
	/// \brief	Resize implementation.
	////////////////////////////////////////////////////////////////////////////////////////////////////
	virtual void resizeImpl(void) = 0;
};

NS_B2D_END

#endif